package com.sxt;


import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

public class GameWin extends JFrame {

    //游戏状态 -> 0未开始 1运行中 2商店 3失败 4胜利
    static int state;


    //创建一个Object类型的集合存储金块,石块

    List<Object> objectList = new ArrayList<>();
   Bg bg = new Bg();
   Line line = new Line(this);

    {
        boolean isPlace = true;//是否可以放置
        for(int i = 0 ; i < 11 ; i++){
            double random = Math.random();
            Gold gold;//存放当前生成的金块
            if(random < 0.3){
                gold = new GoldMini();
            } else if (random < 0.7) {
                gold = new Gold();
            }else{
                gold = new GoldPlus();
            }

            //增强for循环判断金块是否重叠
            for(Object obj:objectList){
                if(gold.getRec().intersects(obj.getRec())){//判断两个矩形是否重叠
                    //如果为true，则不可放置，需要重新生成
                    isPlace = false;
                }
            }
            if (isPlace) {
                objectList.add(gold);
            }else{
                isPlace = true;
                i--;
            }
        }

        for(int i = 0 ; i < 5 ; i++){
            Rock rock = new Rock();//存放当前生成的石块

            //增强for循环判断石块是否重叠
            for(Object obj:objectList){
                if (rock.getRec().intersects(obj.getRec())) {
                    isPlace = false;
                }
            }
            if(isPlace){
                objectList.add(rock);
            }else{
                isPlace = true;
                i--;
            }
        }
    }

   //定义一个画布
    Image offScreenImage;

    void launch(){
        this.setVisible(true);
        this.setSize(768,1000);
        this.setLocationRelativeTo(null);
        this.setTitle("AileenGoldMiner");
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);

                switch (state){
                    case 0 :
                        if(e.getButton() == 3){
                            state = 1;
                            bg.startTime = System.currentTimeMillis();
                        }
                        break;
                    case 1 :
                        //左右摇摆，点击左键
                        if(e.getButton() == 1 && line.state == 0){
                            line.state=1;
                        }
                        //抓取返回，点击右键
                        if(e.getButton() == 3 && line.state == 3 && Bg.waterNum > 0){
                            Bg.waterFlag = true;
                            Bg.waterNum--;
                        }
                        break;
                    case 2 :
                        if(e.getButton() == 1){
                            bg.shop = true;
                        }
                        if (e.getButton() == 3){
                            state = 1;
                            bg.startTime = System.currentTimeMillis();
                        }
                        break;
                    case 3 :
                    case 4 :
                        if(e.getButton() == 1){
                            state = 0;
                            bg.reGame();
                            line.reGame();
                        }
                        break;
                    default:
                }


                //左右摇摆，点击左键
                if(e.getButton() == 1 && line.state == 0){
                    line.state=1;
                }
                //抓取返回，点击右键
                if(e.getButton() == 3 && line.state == 3){
                    Bg.waterFlag = true;
                    Bg.waterNum--;
                }
            }
        });


        while(true){
            repaint();
            nextLevel();


            //限制摆动速度
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    //下一关
    public void nextLevel(){
        if(bg.gameTime() && state == 1){
            if(Bg.count  >= bg.goal)
            {
                if(Bg.level == 5){
                    state = 4;
                }else{
                    state = 2;
                    Bg.level++;
                }

            }else {
                state = 3;
            }
            dispose();
            GameWin gameWin = new GameWin();
            gameWin.launch();
        }

    }

    @Override
    public void paint(Graphics g){
        //定义画布大小，使其与窗口大小一致
        offScreenImage = this.createImage(768,1000);
        Graphics gImage = offScreenImage.getGraphics();
        //将背景，人物，金块依次画入到画布中
        bg.paintSelf(gImage);
        if(state == 1){
            //绘制物体
            //增强for循环
            for(Object obj:objectList){
                obj.paintSelf(gImage);
            }
            //绘制线
            line.paintSelf(gImage);
        }

        //将画布导入到窗体中
        g.drawImage(offScreenImage,0,0,null);
    }

    public static void main(String[] args) {
        GameWin gameWin = new GameWin();
        gameWin.launch();
    }
}
